package pub.com.fengbo.core.util;



import java.util.ArrayList;
import java.util.List;

public class DiGuiUtil {
	//模拟数据库
	private static List<DiGuiBean> db = new ArrayList();
	//用于监控递归调用次数（可选功能 不影响程序使用）
	private static int count = 0;
	/**
	 * 查找子元素 （模拟数据库查询）
	 * @param parentId
	 * @return
	 */
	public static List<DiGuiBean> findSon(Integer parentId){
		List<DiGuiBean> list = new ArrayList();
		for(DiGuiBean d:db){
			if(parentId.equals(d.getParentId())){
				list.add(d);
			}
		}
		return list;
	}
	
	
	/**
	 *传入 需要删除的所有的 parent
	 * @param parents
	 */
	public static void delSon(List<DiGuiBean> parents){
		count++;// 可选项 用于测试递归调用次数
		//标识是否有子元素
		boolean hasSon = true;
		List<DiGuiBean> sonlist = new ArrayList();
		//查找所有子元素
		for(DiGuiBean p:parents){
			sonlist.addAll(findSon(p.getId()));
		}
		//删除自身
		for(DiGuiBean d:parents){
			//调用sql 语句 删除数据库中的记录；
			System.out.println("移除 记录 id = "+d.getId()+" parentid = "+d.getParentId());
			//删除数据库中记录
			db.remove(d);
		}
		//若没有子元素 则改变标识
		if(sonlist.size()==0){hasSon = false;}
		//若存在子元素，递归调用删除子元素
		if(hasSon){
			delSon(sonlist);
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		db.add(new DiGuiBean(1,0));
		
		db.add(new DiGuiBean(2,1));
		db.add(new DiGuiBean(3,1));
		
		db.add(new DiGuiBean(4,2));
		db.add(new DiGuiBean(5,2));
		
		db.add(new DiGuiBean(6,4));
		db.add(new DiGuiBean(7,5));
		
		db.add(new DiGuiBean(8,7));
		
		db.add(new DiGuiBean(9,8));
		db.add(new DiGuiBean(10,8));
		
		db.add(new DiGuiBean(11,9));
		db.add(new DiGuiBean(12,9));
		db.add(new DiGuiBean(13,9));
		db.add(new DiGuiBean(14,9));
		//删除前 数据库中数据
		for(DiGuiBean d:db){
			System.out.println("删除前数据库中记录 id = "+d.getId()+"  parentId = "+d.getParentId());
		}
		//封装需要删除的起点对象
		List<DiGuiBean> list = new ArrayList<DiGuiBean>();
		list.add(db.get(0));//假设删除 DiGuiBean(2,1) 这个对象 及其子对象。若删除根对象 及其以下的 请将此行代码改为 list.add(db.get(0));
		
		//调用删除记录方法 将需要删除的对象作为参数传入。
		delSon(list);
		//删除后的记录
		if(db.size()==0)
			System.out.println("数据库中已没有记录！！");
		else
		for(DiGuiBean d:db){
			System.out.println("删除后数据库中剩余记录： id = "+d.getId()+"  parentId = "+d.getParentId());
		}
		System.out.println("删除的对象 共有 "+(count-1)+" 级子对象");

	}

}
